package com.hut.oa.service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.hut.oa.model.bean.Menu;
import com.hut.oa.model.bean.Status;
import com.hut.oa.model.bean.Type;
import com.hut.oa.model.dao.system.MenuDao;
import com.hut.oa.model.dao.system.StatusDao;
import com.hut.oa.model.dao.system.TypeDao;

@Service
@Transactional(readOnly=true)
public class SystemService {
	
Logger logger=LoggerFactory.getLogger(getClass());
	
	@Autowired
	MenuDao md;
	
	@Autowired
	TypeDao td;
	
	@Autowired
	StatusDao sd;
	
	//public static List<Menu> menuDatas;//菜单数据
	
	public static Map<String, List<Type>> typeDatas;//所有类型数据
	
	public static Map<String, List<Status>> statusDatas;//所有状态数据
	
	/**
	 * 获取菜单所有节点
	 * @PostConstruct在程序开始时就执行
	 * @return
	 */
	//@PostConstruct
	public List<Menu> getDatas(){
		List<Menu> parents=md.findByParentIsNullOrderBySeq();	
		for (Menu menu : parents) {
			List<Menu> children=md.findByParentOrderBySeq(menu);
			menu.setChildren(children);	
			for (Menu menu2 : children) {
				menu2.setChildren(md.findByParentOrderBySeq(menu2));
			}
		}
		logger.info("所有资源 : {}",parents);
		return parents;
	}
	
	/**
	 * 获取所有类型
	 * @return
	 */
	//@PostConstruct
	public Map<String, List<Type>> getTypes(){
		Map<String, List<Type>> maps=new HashMap<>();
		List<Type> types=td.findAll();
		for (Type type : types) {
			maps.put(type.getModule(), td.findByModule(type.getModule()));
		}
		typeDatas=maps;
		logger.info("所有类型： {}",typeDatas);
		return maps;
	}
	
	/**
	 * 获取所有类型
	 * @return
	 */
	//@PostConstruct
	public Map<String, List<Status>> getStatus(){
		Map<String, List<Status>> maps=new HashMap<>();
		List<Status> statuss=sd.findAll();
		for (Status status : statuss) {
			maps.put(status.getModule(), sd.findByModule(status.getModule()));
		}
		statusDatas=maps;
		logger.info("所有类型： {}",statusDatas);
		return maps;
	}
	
	/**
	 * 更改菜单排序
	 * @param thisId
	 * @param otherId
	 */
	@Transactional
	public void updateSeq(Long thisId,Long otherId){
		int thisSeq=md.findById(thisId).getSeq();
		int otherSeq=md.findById(otherId).getSeq();
		//更改当前菜单排序
		md.updateSeq(otherSeq, thisId);
		//更改另一菜单排序
		md.updateSeq(thisSeq, otherId);
	}
	
	/**
	 * 更改菜单状态
	 * @param id
	 * @param open
	 */
	@Transactional
	public void updateOpen(Long id,boolean open){
		md.updateOpen(open, id);
	}

}
